from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
import ConfigParser
import sys
lista = sys.path[0].split("/")
path = ""
for i in xrange(0, len(lista)-2):
    path= path+lista[i]+"/"
sys.path[0] = path
from epm import app

if app.config['DEV'] == True:
    bdpath = "postgresql://postgres:postgres@localhost:5432/epmdb"
    print "Ambiente de Desarrollo"
else:
    bdpath = "postgresql://postgres:postgres@localhost:5432/epmdbAp"
    print "Ambiente de Homologacion y Pruebas"

""" Encargado de crear la conexion con la base de datos """

engine = create_engine(bdpath)
metadata = MetaData()
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))

def init_db():
    """ Metodo encargado de la inicializacion de la instancia de la base de datos """
    
    metadata.drop_all(bind=engine)
    metadata.create_all(bind=engine)
    
def get_table_list_from_db():
    """ Retorna una lista con el nombre de todas las tablas del esquema de base de datos actual """
    
    sql="select table_name from information_schema.tables"\
        "where table_schema='public'"
    execute = metadata.execute
    return [name for (name, ) in execute(text(sql))]

def get_seq_list_from_db():
    """ Retorna una lista de la secuencia de nombres del esquema de base de datos actual """
    
    sql="select sequence_name from information_schema.sequences"\
        "where sequence_schema='public'"
    execute = metadata.execute
    return [name for (name, ) in execute(text(sql))]

def drop_all_tables_and_sequences():
    """ Elimina todas las tablas y secuencias """
    
    execute = metadata.execute
    for table in get_table_list_from_db():
        try:
            execute(text("DROP TABLE %s CASCADE" % table))
        except SQLError, e:
            print e

    for seq in get_seq_list_from_db():
        try:
            execute(text("DROP SEQUENCE %s CASCADE" % table))
        except SQLError, e:
            print e

def shutdown_session(exception=None):
    """ Metodo encargado de la finalizacion de la instancia de la base de datos """
    
    db_session.remove()
